home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
126-150
/
disk_140
/
sbprolog
/
hanoi.p
< prev
next >
Wrap
Text File
|
1992-05-06
|
2KB
|
48 lines
% hanoi.P
% This is an example program
% To load it, type consult('hanoi.P').
% Note the single quotes. This is necessary as SBProlog
% considers the '.' character to be the termination character
% for a clause.
% This program is an implementation of the Towers of Hanoi problem.
% Supposedly in Tibet, there is a tower of 64 golden disks. Each
% disk is of a different radius, and the disks are placed on a pole
% such that the largest is at the bottom and the smallest at the
% top.
% The monks job was to move all the disks from one tower to a
% second one (they could also use a third or auxilary tower)
% with the following restrictions:
% Only one disk can be moved at a time
% A disk may never have a large one placed above it
% To use the program, you need to determine how many
% disks you want and the names of the three towers.
% As an example, try:
% hanoi(3,start,aux,end, Solution).
% This will solve the tower of hanoi for 3 disks.
% The solution is a list of moves.
% You can also compile the program for greater speed.
% Type the following:
% compile('hanoi.P','hanoi').
% load(hanoi).
% The first line compiles the program into a file named hanoi.
% Surprisingly enough, load -- well, it loads the byte code
% (compiled) file hanoi. Once it is loaded, it can be executed
% just as if you had consulted it.
% append(A,B,C) - True when list C is the concatenation of lists A & B
append([],List,List).
append( [H|T], List, [H | Outlist]) :- append(T, List, Outlist).
% hanoi(N, From, Aux, To, Solution_list) - True when Solution_list
% is the solution to the Towers of Hanoi problem of N disks.
hanoi(1,From,Aux,To,[move(From,To)]).
hanoi(N,From,Aux,To,Moves) :-
Nminus1 is N - 1,
hanoi(Nminus1,From,To,Aux,Offmvs),
hanoi(Nminus1,Aux,From,To,Onmvs),
append(Offmvs,[mv(From,To)|Onmvs],Moves).